FAQ

地图

地图类型

问: SuperMap iMobile for Android 支持哪些数据类型?
答:
  1. 支持扩展名为 *.smwu、*.sxwu的 SuperMap GIS 工作空间文件的打开、关闭、创建和保存;
  2. 支持扩展名为 *.udb/*.udd/*.udbx 的 SuperMap GIS 数据源文件的打开、关闭、创建、保存等;
  3. 支持以文件型数据源的方式打开和关闭扩展名为 *.sci 的 SuperMap GIS 缓存文件;
  4. 支持以文件型数据源的方式打开和关闭扩展名为 *.sit 的 SuperMap GIS 影像文件;
  5. 支持SuperMap GIS矢量数据集的打开、关闭、查询、修改、删除等。其中 SuperMap GIS 矢量数据集包括:点数据集(Point)、线数据集(Line)、面数据集(Region)、纯属性数据集(Tabular)、文本数据集(Text)、复合数据集(CAD);
  6. 支持 SuperMap GIS 格网数据集(grid)的打开、关闭、创建金字塔等。SuperMap GIS 格网数据集属于栅格数据集类型,例如高程数据集 ( DEM ) 和土地利用图;
  7. 支持 SuperMap GIS 影像数据集 (Image) 的打开,关闭等。SuperMap GIS 影像数据集用于描述影像数据,不具备属性信息,例如影像地图 (bmp、jpg) 、多波段影像和实物地图等;
  8. 支持在线或离线应用 SuperMapCloud、SuperMap iServer、MapWord、BaiduMap、GoogleMaps、OGC 的 WMTS 服务等网络地图服务。
问: 如何使用 SuperMap iServer、超图云等网络地图服务?
答:

网络地图服务是一种独立的数据源类型,可以在工作空间中打开,获得对应的网络地图服务数据集,将该数据集作为一个图层加入到地图中显示。

问: 如何打开多个在线地图服务?
答:

打开多个在线地图服务需要实例化多个数据源连接参数类DatasourceConnectionInfo,分别设置每个在线地图服务的参数。一个数据源连接对应一个别名,数据源连接参数中别名需要不一致。

问: 是否支持海图数据,怎么打开海图数据?
答:

移动端不能直接打开海图数据,但是可以先在iDesktop中打开海图数据,制作缓存,然后在iServer中发布为rest地图服务,在移动端打开rest地图服务,加载地图即可。

地图显示

问: 以公开发布的网络地图服务作为底图时,叠加的其他数据和GPS数据为什么会偏移?
答:

公开发布的网络地图服务通常都经过数据的加密偏移,如百度地图服务;或者采用特定的投影坐标系,如谷歌地图服务;以此类网络地图服务作为地图叠加数据时,需要先将要叠加的数据进行相应的加密偏移处理和转换到相同的投影坐标系,才能正确的叠加显示。

问: SuperMap iMobile加载天地图和本地sci图层未叠加在一起?
答:

结果不正确是因为坐标系不一致,使用map.setdynamicprojection(true)开启动态投影再查看。

问: 调用不出在线天地图服务,其他在线地图服务可以打开?
答:
  1. 先确认用的是什么坐标系的天地图,如果是墨卡托投影的天地图,需要在url后面加上“&topleftcornerexchange=1”这是因为墨卡托天地图默认从左上角开始绘制的;
  2. 如果还是不显示,把手机目录下sdcard/SuperMap/data/里面的缓存数据删除再重新加载;
  3. 如果还是不显示,建议更换网络环境。
问: 天地图与本地数据叠加的二维地图缩放和中心点设置不生效?
答:

经过动态投影之后的地图范围不再是天地图的原有范围了。应该获取到天地图的数据集,再获取到天地图数据集的bounds,再用map.setviewbounds设置对应的显示范围。

问: 如何实现加载在线地图高清显示?
答:

在添加或者打开地图之前设置地图高清显示:map.setHighDefinitionMode(true)。

问: 为什么在桌面软件(SuperMap iDesktop/iDesktopX)中为地图设置了填充符号,在iMobile中打开地图时却不显示该符号?
答:

原因是该符号为桌面软件符号库内置符号,若要在移动端显示,需要把这种内置符号在iDesktop以图片符号的格式导入,方可在移动端直接打开显示。

其它

问: 在移动终端上显示线、面数据慢的原因?
答:

常见原因是被显示的数据集没有建立空间索引。建议用 SuperMap iDesktop 给相关数据集建立空间索引,这样将在移动终端上极大提高线、面显示速度。

问: 如何监听地图中心点和比例尺发生变化?
答:

使用mapControl.setMapParamChangedListener(MapParameterChangedListener listener) 设置地图参数变化监听器,在回调事件中去监听地图参数变化。

问: 如何监听地图参数变化?
答:

使用MapControl类的setMapParamChangedListener(MapParameterChangedListener listener)地图参数变化监听方法,可以监听地图比例尺、角度、范围和尺寸变化。

问: 地图、地图控件和工作空间该如何关闭?关闭的顺序是怎样的?
答:
  1. 关闭Map对象 Map.Close() ;
  2. 关闭MapControl对象 MapControl.dispose() ;
  3. 关闭Workspace对象 Workspace.Close()、Workspace.dispose()。
问: 加载删格瓦片地图外围有白色背景,如何取消?
答:

可以用LayerSettingImage.setTransparent(true)设置影像图层背景色透明显示。

问: 如何获取手指点击屏幕处所对应的地图坐标点?
答:

先通过MapControl类下的setGestureDetector()设置用户手势识别器中的短按或长按方法获取触屏位置的屏幕坐标Point,然后使用map.pixelToMap()方法将屏幕点转地图点坐标Point2D。

问: 量算绘制,如何移动地图?
答:

当Action不为PAN漫游的时候,如果想要移动地图,需要双指按住屏幕,拖动即可移动地图。

问: 数据集为属性表数据,如何给属性表添加记录?
答:

addNew(Geometry geometry, java.util.Map values) 方法中Geometry参数为空,Map对象中存储需要传入的字段和字段值即可。

服务

问: 访问SuperMap iServer发布的rest地图服务,该服务在SuperMap iServer更新后,能否在Android端也实时更新,动态出图?
答:

可以做到Android端实时更新,动态出图,只需清除数据集和该图层的缓存即可,代码如下:

Layer imageLayer=mapControl.getMap().getLayers().get("rest");

DatasetImage image=(DatasetImage) imageLayer.getDataset();

imageLayer.removeCache();

image.getMapCacheService().removeCache();

专题图

问: 线、面图层的专题标签在小比例尺下不显示?
答:

主要是由于在小比例尺下,专题标签大于线和面对象的大小,默认不显示,可以设置ThemeLabel.setSmallGeometryLabeled(true)在小比例尺下也能显示。

问: 创建标签专题图,怎么让一部分标签不显示?
答:

分两种情况:

1.如果只是让一些小对象的标签不显示,可以设置themeLabel.setSmallGeometryLabeled(false)属性。

2.如果让某些特定的标签对象不显示的话,可以做如下设置:

QueryParameter parameter=new QueryParameter();

parameter.setAttributeFilter("SMID=5");

themeLabelLayer.setDisplayFilter(parameter);

mapcontrol.getMap().refresh();

导航

问: 运行导航功能时失败的原因?
答:

常见原因是缺少语音资源,请将产品包中Resource文件夹下的voice文件夹拷贝到工程目录中的assets文件夹下。

三维

问: 加载三维场景,能否设置某些建筑模型不可见?
答:

1.需要查询出哪些id的模型不可见;

2.通过Layer3DOSGBFile.setObjectsVisible(int[] ids, boolean value) 来设置指定id的模型队列是否可见。

问: 加载三维场景,能否设置某些建筑模型高亮显示?
答:

1.需要查询出哪些id的模型高亮显示;

2.通过Layer3DOSGBFile.setObjectsColor(int[] ids, Color value) 来设置指定id的模型队列的显示颜色。

问: 打开三维场景,选中某个模型后,如何获取该模型的属性信息?
答:

通过Layer3DOSGBFile.getAllFieldValueOfLastSelectedObject() 方法获取最后一次选择的模型的所有属性信息。

问: 如何将屏幕坐标转三维坐标?
答:

使用scene.pixelToGlobe(Point point,PixelToGlobeMode mode)方法将屏幕像素点坐标转换为三维坐标。

许可

问: 如何获取设备ID来申请许可?
答:

通过environment.getDeviceID()获取设备ID,获取时需要注意:1.设备的wifi权限须打开;2.targetSDKVersion版本不高于28。

问: 使用序列号激活的方式,如何查看许可使用数量和剩余数量?
答:

使用RecycleLicenseManager.queryLicenseCount(String ),然后通过回调函数获取数量。

示例代码

问: 运行工程的时候报“.so文件与jar包”不匹配?
答:

出现这种报错可从如下几点排查:

1、工程中引用的iMobile for Android的.so文件和jar包版本是否一致;

2、工程中除了引用iMobile for Android中的.so文件,也引用了第三方的.so文件,导致有冲突;

3、工程

问: SampleCode 运行不成功常见原因?
答:

1. 首先检查范例程序用到的数据和许可是否放到了代码指定的位置。

2. 查看工程最低权限是否配置完全,点击工程 AndroidManifest.xml 节点里的 permissions 页面,添加以下“Uses Permission”:

  1)<uses-permission android:name="android.permission.INTERNET"/>

  2)<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

  3)<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

  4)<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  5)<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE">

3. 是否将 android-sdk-windows 中的 tools 和 platform-tools 文件夹路径添加到环境变量中。

4. 当 SampleCode 用到的数据量较大时,要先查看SdCard的容量是否满足,若不满足,要先扩充 SdCard 的容量。

5. 有时 SampleCode 运行不起来,可以尝试先卸载示例程序,再次运行,防止之前 SampleCode 卸载不完全导致的冲突。